@echo off
chcp 65001 >nul 2>&1
setlocal enabledelayedexpansion

:: 提示用户拖拽文件
if "%~1"=="" (
    echo ========================
    echo 请将需要拆分的文件拖拽到本脚本图标上！
    echo 示例：把 bigfile.zip 拖到 split_file_fix.bat 上
    echo ========================
    pause
    exit /b 1
)

:: 定义核心参数（100MB=104857600字节）
set "SOURCE_FILE=%~1"
set "CHUNK_SIZE=104857600"
set "OUTPUT_DIR=%~dp1"  :: 强制输出到原文件同目录
set "OUTPUT_PREFIX=%~n1_"  :: 分卷前缀：原文件名_

:: 验证源文件是否存在
if not exist "!SOURCE_FILE!" (
    echo 错误：文件 "!SOURCE_FILE!" 不存在！
    pause
    exit /b 1
)

:: 添加默认值检查
@REM if "%~n1"=="" (
@REM     set "OUTPUT_PREFIX=chunk_"
@REM ) else (
@REM     set "OUTPUT_PREFIX=%~n1_"
@REM )

:: 调用PowerShell执行拆分（核心逻辑）
echo 开始拆分：!SOURCE_FILE!
echo 分卷大小：100MB/个
echo 输出目录：!OUTPUT_DIR!
echo.
powershell -Command "$inputFile = '!SOURCE_FILE!'; $chunkSize = !CHUNK_SIZE!; $outputPrefix = '!OUTPUT_PREFIX!'; $outputDir = '!OUTPUT_DIR!'; $fileStream = [System.IO.File]::OpenRead($inputFile); $buffer = New-Object byte[] $chunkSize; $chunkNumber = 1; while (($bytesRead = $fileStream.Read($buffer, 0, $buffer.Length)) -gt 0) { $outputFile = Join-Path $outputDir ($outputPrefix + $chunkNumber.ToString('000') + '.part'); $outputStream = [System.IO.File]::OpenWrite($outputFile); $outputStream.Write($buffer, 0, $bytesRead); $outputStream.Close(); Write-Host '生成分卷：' $outputFile; $chunkNumber++; } $fileStream.Close(); Write-Host '拆分完成！共生成 ' ($chunkNumber-1) ' 个分卷';"

echo.
echo ========================
echo 拆分完成！分卷位置：!OUTPUT_DIR!
echo 分卷命名：!OUTPUT_PREFIX!001.part、!OUTPUT_PREFIX!002.part...
echo 合并命令：copy /b "!OUTPUT_DIR!!OUTPUT_PREFIX!*.part" "!OUTPUT_DIR!!~n1!!~x1"
echo ========================
pause
exit /b 0